#ifndef __MOTOR_DRIVE_H__
#define __MOTOR_DRIVE_H__

#include "app_main.h"
//=================================用户修改======================================
// 相电流采样电阻
#define SampleResistance 0.005f
// 相电流采样增益
#define CurrentSenseGain 20.0f
// 总线电压采样电阻分压倍数
#define VoltDividerTimes 16.0f
// 相电流ADC比例
#define I_Ratio ((3.3f / 4095.0f) / SampleResistance / CurrentSenseGain)
// 相电压ADC比例
#define V_Ratio (VoltDividerTimes * 3.3f / 4095.0f)
// TIM1中用于生成PWM的ARR值
#define PWM_AAR_VAL 4250u
// 99%占空比下CCR的值
#define PWM_CRR_VAL (PWM_AAR_VAL * 0.99f)
//===================================END========================================

typedef struct
{
    // 三相电压和总线电压的ADC值
    uint16_t va, vb, vc, vbus;
    // 三相电流和总线电流的ADC值
    uint16_t ia, ib, ic, ibus;
    // 三相电流和总线电流的ADC偏移值
    uint16_t ia_offs, ib_offs, ic_offs, ibus_offs;

    // 用于电机调速的电位器的ADC值
    // uint16_t adjr;

    // 用于测量MOS管温度的NTC热敏电阻的ADC值
    // uint16_t tmos;
} stMotorDrive_ADC_type;

void Motor_Drive_initHardware(void);
void Motor_Drive_getADCOffs(void);
void Motor_Drive_startPWM(void);
void Motor_Drive_stopPWM(void);
void Motor_Drive_sildePWM(void);
void Motor_Drive_breakPWM(void);
void Motor_Drive_setPWM(float _A, float _B, float _C);

#endif